package Reeks5.VanRansbeeck.Kevin.Model;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/* 52 Kaarten */

public class Deck {
    private List<Kaart> kaarten;
    private Random random = new Random();

    // vullen met 52 kaarten aan begin
    public Deck() {
        this(false);
    }
    public Deck(boolean shuffle) {
        kaarten = new ArrayList<Kaart>();
        this.reset(shuffle);
    }

    public List<Kaart> getKaarten() {
        return kaarten;
    }

    private void setKaarten(List<Kaart> kaarten) {
        this.kaarten = kaarten;
    }

    public int getAantalKaarten() {
        return this.kaarten.size();
    }

    public Kaart neemKaart(int index) {
        Kaart kaart = null;
        boolean succes = false;

        if(this.getAantalKaarten() > 0) {
            try {
                kaart = this.kaarten.get(index);
                succes = this.kaarten.remove(kaart);
            } catch (Exception e) { 
                kaart = null;
            }
        }
        if (succes)
            return kaart;
        else
            return null;
    }

    public Kaart neemRandomKaart() {
        int index = this.random.nextInt(this.getAantalKaarten());

        return this.neemKaart(index);
    }

    public Kaart neemBovensteKaart() {
        int index = this.getAantalKaarten()-1;

        return this.neemKaart(index);
    }

    public Kaart neemOndersteKaart() {
        int index = 0;

        return this.neemKaart(index);
    }

    public void schudden() {
        List<Kaart> nieuwDeck = new ArrayList<Kaart>();
        while(kaarten.size() > 0) {
            Kaart k = this.neemRandomKaart();
            nieuwDeck.add(k);
        }
        this.setKaarten(nieuwDeck);
    }

    public void reset() {
        this.reset(false);
    }
    public void reset(boolean shuffle) {
        kaarten.clear();
        for (Type type : Type.values()) {
            for (Waarde waarde : Waarde.values()) {
                kaarten.add(new Kaart(type, waarde));
            }
        }
        if(shuffle) {
            this.schudden();
        }
    }

    @Override
    public String toString() {
        String ret = "Aantal kaarten nog in deck: " + this.getAantalKaarten() + "\n";
        // eventueel aanvullen met de kaarten zelf?
        return ret;
    }

}
